package Day15.ZuoYe;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

//气象服务器
/*4：假设有个Socket服务器，提供查询气温，风力，pm2.5,湿度等气象服务，请设计服务端和客户端实现，提供退出功能，
并使用多线程防止服务端堵塞。
客户端选择要查询的类型，是气温，还是其他，服务端返回相应的值，并加上当前的日期（用yyyy-MM-dd hh:mm:ss格式），
服务端通过多线程的方式提高性能,客户端发送和接收统一采用字符串格式
用多线程提高响应速度
*/
public class WeatherServer {
    public static void main(String[] args) {
        ServerSocket socket = null;
        try {
            socket = new ServerSocket(9999);
            System.out.println("服务器已启动。。。。。。");
            while (true) {
                new InquireWeather(socket.accept()).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class InquireWeather extends Thread {
    private final Socket socket;

    public InquireWeather(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {//提供查询气温，风力，pm2.5,湿度
        System.out.println(socket + "已连接成功。。。。。。");
        try {
            InputStream is = socket.getInputStream();
            OutputStream os = socket.getOutputStream();
            BufferedReader buffer = new BufferedReader(new InputStreamReader(is));
            String bs = buffer.readLine();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            Date date = new Date();
            String time = sdf.format(date);
            Random random = new Random();
            if (bs.equals("气温")) {
                os.write((time + "  气温是："+(random.nextBoolean()?"":"-")+random.nextInt(100)+" ℃").getBytes());
            } else if (bs.equals("风力")) {
                os.write((time + "  风力是："+random.nextInt(20)+"级").getBytes());
            } else if (bs.equals("pm2.5")) {
                os.write((time + "  pm2.5是："+random.nextInt(100)).getBytes());
            } else if (bs.equals("湿度")) {
                os.write((time + "  湿度是："+random.nextInt(100)+"%rh").getBytes());
            } else {
                os.write("您的输入选项不存在。".getBytes());
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
